package demo;

import org.junit.Test;

import java.io.PrintStream;
import java.util.Comparator;
import java.util.function.BiPredicate;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;

/**
 * @Author: WWQ
 * @Date: 2019/4/4 9:14
 * @Version 1.0
 */
public class MethodRefTest {

    /**
     * 语法一：
     * 对象：：实例对象
     */
    @Test
    public void test1() {
        PrintStream ps = System.out;
        // Consumer<String> con=(x)-> ps.println(x);
        Consumer<String> con1 = ps::println;
        //con.accept("123");
        con1.accept("345");
    }

    /**
     * 类：：静态方法名
     */
    @Test
    public void test2() {
        //Comparator<Integer> comparator=(x,y)->Integer.compare(x,y);
        Comparator<Integer> comparator2 = Integer::compare;
        comparator2.compare(8, 9);
    }

    /**
     * 类：：实例方法名
     */
    @Test
    public void test3() {

        BiPredicate<String, String> bp = (x, y) -> x.equals(y);
        /**
         * 参数列表中的第一个参数是实例方法的调用者，而第二个参数是实例方法的参数时，可以使用类：实例方法名
         */
        BiPredicate<String, String> bp2 = String::equals;
    }
    @Test
    public void test5(){
        //旧的写法
        Supplier<Employee> supplier=()->new Employee();
        /**
         * 构造器引用，跟接口中的参数列表一致。
         */
        Supplier<Employee> supplier2=Employee::new;
        Employee el =supplier2.get();
        System.out.println(el.toString());
    }
    @Test
    public void test6(){
        Function<Integer,String[]> fun=(x)->new String[x];
        /**
         * 数组引用
         */
        Function<Integer,String[]> fun2=String[]::new;
        String[] str=fun2.apply(10);
        System.out.println(str.length);
    }

}
